﻿//------------------------------------------------------------------------------
// ThanhLNY
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Security.Policy;

namespace VietTrips.Domain.Models
{
    [Table("UserProfile")]
    public class UserProfile
    {
        public UserProfile()
        {
            this.LastModified = DateTime.UtcNow;
            this.Country = "Việt Nam";
            this.IsDeleted = false;
            this.Roles = new HashSet<Role>();
            this.Bookings = new HashSet<Booking>();
        }

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }

        [Index]
        [MaxLength(80)]
        [Required(ErrorMessage = "Xin hãy điền Tên đăng nhập vào để có thể đăng ký")]
        [StringLength(80, ErrorMessage = "{0} phải dài hơn {2} ký tự.", MinimumLength = 6)]
        [Display(Name = "Tên truy cập")]
        public string UserName { get; set; }

        [MaxLength(100)]
        [StringLength(100)]
        [Required(ErrorMessage = "Xin hãy điền Họ Tên bạn vào để có thể đăng ký")]
        [Display(Name = "Họ và Tên")]
        public string FullName { get; set; }

        [Display(Name = "Giới tính")]
        public bool Female { get; set; }

        [Index]
        [MaxLength(80)]
        [StringLength(80)]
        [Required(ErrorMessage = "Xin hãy điền Email vào để có thể đăng ký")]
        [EmailAddress(ErrorMessage = "Địa chỉ Email không hợp lệ")]
        [Display(Name = "Địa Chỉ Email")]
        public string Email { get; set; }

        [MaxLength(20)]
        [MinLength(8)]
        [Required(ErrorMessage = "Xin hãy điền Số điện thoại bạn vào để có thể đăng ký")]
        [DataType(DataType.PhoneNumber, ErrorMessage = "Số điện thoại này không hợp lệ")]
        [Display(Name = "Số Điện Thoại")]
        [StringLength(20, MinimumLength = 8, ErrorMessage = "Số điện thoại này không hợp lệ")]
        public string Phone { get; set; }

        [MaxLength(200)]
        [Display(Name = "Địa Chỉ")]
        [StringLength(200, MinimumLength = 5, ErrorMessage = "Số điện thoại này không hợp lệ")]
        public string Address { get; set; }

        [MaxLength(50)]
        [StringLength(50)]
        [Display(Name = "Tỉnh / Thành Phố")]
        public string City { get; set; }

        [MaxLength(50)]
        [StringLength(50)]
        public string Country { get; set; }

        [Required]
        [DataType(DataType.Date)]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        [Display(Name = "Ngày Sinh")]
        public DateTime DateOfBirth { get; set; }

        public DateTime CreatedDate { get; set; }

        public bool IsActivated { get; set; }

        public DateTime LastModified { get; set; }

        public bool IsDeleted { get; set; }

        public virtual ICollection<Role> Roles { get; set; }

        public virtual ICollection<Booking> Bookings { get; set; }
    }
}